package com.boot.shiro.controller;

import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import com.boot.business.demo.dao.UserJpaDao;
import com.boot.shiro.core.ShiroKit;
import com.boot.shiro.core.ShiroUser;
import com.boot.shiro.dao.MenuDao;
import com.boot.shiro.util.ToolUtil;
import com.google.code.kaptcha.Constants;

/**
 * 登录控制器
 *
 * @author fengshuonan
 * @Date 2017年1月10日 下午8:25:24
 */
@Controller
public class LoginController extends BaseController{

    @Autowired
    private MenuDao menuDao;

    @Autowired
    private UserJpaDao userDao;

//    /**
//     * 跳转到主页
//     */
//    @RequestMapping(value = "/", method = RequestMethod.GET)
//    public String index(Model model) {
//        //获取菜单列表
//        List<Integer> roleList = ShiroKit.getUser().getRoleList();
//        List<MenuNode> menus = menuDao.getMenusByRoleIds(roleList);
//        List<MenuNode> titles = MenuNode.buildTitle(menus);
//        model.addAttribute("titles", titles);
//
//        //获取用户头像
//        Integer id = ShiroKit.getUser().getId();
//        User user = userMapper.selectById(id);
//        String avatar = user.getAvatar();
//        model.addAttribute("avatar", avatar);
//
//        return "/index.html";
//    }

    /**
     * 跳转到登录页面
     */
    @RequestMapping(path = "login", method = RequestMethod.GET)
    public String login() {
        if (ShiroKit.isAuthenticated() || ShiroKit.getUser() != null) {
        	logger.info("已登录");
        	
            return REDIRECT + "/";
        } else {
        	logger.info("未登录，请登录");
            return "login";
        }
    }
    /**
     * 跳转到首页
     */
    @RequestMapping(value = "/index", method = RequestMethod.GET)
    public ModelAndView index() {
    	return new ModelAndView("/system/index");
    }
    /**
     * 点击登录执行的动作
     */
    @RequestMapping(value = "/login", method = RequestMethod.POST)
    public String loginVali() {

        String username = super.getPara("username").trim();
        String password = super.getPara("password").trim();
        System.out.println(password);
        //验证验证码是否正确
        if(ToolUtil.getKaptchaOnOff()){
            String kaptcha = super.getPara("kaptcha").trim();
            String code = (String) super.getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY);
            if(ToolUtil.isEmpty(kaptcha) || !kaptcha.equals(code)){
                throw new RuntimeException("验证码不匹配,="+kaptcha+" 正确验证码="+code);
            }
        }

        Subject currentUser = ShiroKit.getSubject();
        UsernamePasswordToken token = new UsernamePasswordToken(username, password.toCharArray());
        token.setRememberMe(true);

        currentUser.login(token);

        ShiroUser shiroUser = ShiroKit.getUser();
        super.getSession().setAttribute("shiroUser", shiroUser);

       // LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp()));

        return REDIRECT + "/";
    }

    /**
     * 退出登录
     */
    @RequestMapping(value = "/logout", method = RequestMethod.GET)
    public String logOut() {
      //  LogManager.me().executeLog(LogTaskFactory.exitLog(ShiroKit.getUser().getId(), getIp()));
        ShiroKit.getSubject().logout();
        super.getSession().invalidate();
        return REDIRECT + "/login";
    }
    public static void main(String[] args) {
    	UsernamePasswordToken token = new UsernamePasswordToken("admin", "123456".toCharArray());
    	token.getPassword();
    	System.out.println(token.toString()+"---------"+token.getPassword().toString());
	}
}
